package com.sunyur.tailor.channel.service.inner.protocol.param;

import lombok.Data;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.List;

/**
 * @ClassName CreateProtocolParam
 * @Description 协议信息创建请求主体
 * @Author hao.tian
 * @Date 2021/5/14
 * @Version v1.0
 */
@Data
public class CreateProtocolParam implements Serializable{


	private static final long serialVersionUID = -2994127695596132220L;
	/**
	 * 协议编号
	 */
	private String protocolCode;

	/**
	 * 合同编号
	 */
	private String contractCode;

	/**
	 * 协议名称
	 */
	private String protocolName;
	/**
	 * 合同名称
	 */
	private String contractName;

	/**
	 * 采购员编码
	 */
	private String buyerCode;

	/**
	 * 采购组织code
	 */
	private String orgCode;

	/**
	 * 采购商公司主体编码（目前只支持一个公司主体，未来支持多个公司主体）
	 */
	private List<String> companySubjectCodes;

	/**
	 * 定价方式（1固定价格协议,2浮动折扣价格协议）
	 */
	private Integer pricingMethod;

	/**
	 * 供应商编码
	 */
	private String supplierCode;

	/**
	 * 统一社会信用代码（供应商）
	 */
	private String supplierCreditCode;

	/**
	 * 交易方式(1货到付款、2预存款、3担保交易)
	 */
	private Integer tradeMethod;

	/**
	 * 付款方式(如：1银行转账、2电汇、3现金等数据字典中取)
	 */
	private Integer paymentMethod;

	/**
	 * 备注
	 */
	private String remark;

	/**
	 * 协议有效期开始时间
	 */
	private Long protocolValidityBegin;

	/**
	 * 协议有效期结束时间
	 */
	private Long protocolValidityEnd;

	/**
	 * 协议状态（0草稿、2待审批、4审批未通过、6未执行、8执行中、9已中止、10已失效）
	 */
	private Integer protocolStatus;

	/**
	 * 运费类型（0供应商承担运费,1有运费－自定义运费)
	 */
	private Integer freightType;

	/**
	 * 协议行总数
	 */
	private Integer itemTotal;

	/**
	 * 结算周期（如：1周结、2月结、3季度结、4合同结算）
	 */
	private Integer settlementCycle;

	/**
	 * 业务模式类型(0付费商品协议、1调旧闲置商品协议、2领用商品协议)
	 */
	private Integer businessType;

	/**
	 *
	 */
	private List<ProtocolItems> protocolItems;
	@Data
	public static class ProtocolItems implements Serializable{

		private static final long serialVersionUID = -2645591033532329692L;

		/**
		 * 外部协议行ID
		 */
		private String outerProtocolItemId;

		/**
		 * 品牌名称
		 */
		private String brandName;

		/**
		 * 行备注
		 */
		private String itemRemark;

		/**
		 * 协议行有效期开始时间
		 */
		private Long itemValidityBegin;

		/**
		 * 协议行有效期结束时间
		 */
		private Long itemValidityEnd;

		/**
		 * 采购名称
		 */
		private String itemBuyer;

		/**
		 * 物料编码
		 */
		private String materielCode;

		/**
		 * 价格类型(1:单一价格、2:单订单阶梯价、3:累计阶梯价)
		 */
		private Integer priceType;

		/**
		 * 协议行类型 【0标准物料协议行； 1通用协议行,无物料信息协议行上必填项都为非必填】
		 */
		private Integer protocolItemType;

		/**
		 * 采购额上限（元，类似合同帽，协议行的上限）
		 */
		private Integer amountUpperLimit;

		/**
		 * 交期(天，从下单成功开始算起供应商应到货的天数)
		 */
		private Integer deliveryDate;

		/**
		 * 送货地区
		 */
		private List<DeliveryAreaList> deliveryAreaList;
		@Data
		public static class DeliveryAreaList implements  Serializable{

			private static final long serialVersionUID = 7320896270821821574L;

			/**
			 * 省编码
			 */
			private String provinceCode;

			/**
			 * 省名称
			 */
			private String provinceName;

			/**
			 * 城市编码
			 */
			private String cityCode;

			/**
			 * 城市名称
			 */
			private String cityName;
		}

		/**
		 * 描述
		 */
		private String describeMsg;

		/**
		 *
		 */
		private PriceRule priceRule;
		@Data
		public static class PriceRule implements Serializable{

			private static final long serialVersionUID = 7445365993875631080L;

			/**
			 * 税点
			 */
			private BigDecimal taxPoint;

			/**
			 * 税点code
			 */
			private String taxCode;

			/**
			 * 起定量
			 */
			private BigDecimal startQuantity;

			/**
			 * 参考价（元）
			 */
			private BigDecimal referencePrice;

			/**
			 * 区域定价模型
			 */
			private List<RegionPriceList> regionPriceList;
			@Data
			public static class RegionPriceList implements Serializable{

				private static final long serialVersionUID = 2037452844513418890L;

				/**
				 *
				 */
				private List<regionList> regionList;
				@Data
				public static class regionList implements  Serializable{


					private static final long serialVersionUID = 3577514058434017236L;

					/**
					 * 省编码
					 */
					private String provinceCode;

					/**
					 * 省名称
					 */
					private String provinceName;

					/**
					 * 城市编码
					 */
					private String cityCode;

					/**
					 * 城市名称
					 */
					private String cityName;
				}

				/**
				 *
				 */
				private List<PriceList> priceList;
				@Data
				public static class PriceList implements  Serializable{

					private static final long serialVersionUID = -6245501441386852372L;
					/**
					 * 协议价(含税)
					 */
					private BigDecimal price;

					/**
					 * 未税价（元）
					 */
					private BigDecimal untaxedPrice;

					/**
					 * 阶梯起订起始量（阶梯价必填）
					 */
					private BigDecimal startStepQuantity;

					/**
					 * 阶梯起订截止量（阶梯价必填）
					 */
					private BigDecimal endStepQuantity;
				}
			}
		}

		/**
		 * 质保期
		 */
		private String qualityAssurancePeriod;

		/**
		 * 协议行操作类型[1新增2修改3删除]
		 */
		private Integer operateType;
	}

	/**
	 * 操作人编码
	 */
	private String operatorCode;

	/**
	 * 发票类型(1-增值税专票,2-增值税普票)
	 */
	private Integer invoiceType;

	/**
	 * 运费规则编码
	 */
	private String freightRuleCode;

	/**
	 * 币种编码
	 */
	private String currencyCode;

	/**
	 *外部付款条款编码
	 */
	private String outsidePaymentClauseCode;

	/**
	 * 付款条款详情
	 */
	private List<CreateProtocolParam.SettlementRules> settlementRules;

	@Data
	public static class SettlementRules implements Serializable {

		/**
		 *付款条款行编码
		 */
		private String paymentClauseItemCode;

		/**
		 *预付款
		 */
		private Integer prepayment;

		/**
		 *付款阶段编码
		 */
		private String paymentStageCode;

		/**
		 *付款阶段名称
		 */
		private String paymentStageName;

		/**
		 *备注
		 */
		private String remark;
	}

	/**
	 *采购组编码
	 */
	private String paymentStageName;

	/**
	 * 协议文本附件
	 */
	private List<CreateProtocolParam.ProtocolTextFileList> protocolTextFileList;

	@Data
	public static class ProtocolTextFileList implements Serializable {

		/**
		 *文件名称
		 */
		private String name;

		/**
		 *文件路径
		 */
		private String url;
	}
}
